#include<stdio.h>

#define ArraySize(a) sizeof(a)/sizeof(a[0])
//当数组作为函数参数传递的时候，会被弱化为指针
//丢失数组的容量
void PrintArray(int *a,int size) //单独传递数组容量
{
    for(int i=0;i<size;i++)
    {
        printf("%d ",a[i]);
    }
}

int main()
{
    //数组：一组地址连续的相同数据类型的元素
    /* int a[3]; *///定义一个int型数组，有3个int元素
    // a[0] a[1] a[2] 数组的下标是从0开始

    //用{} 来初始化一个数组
    /* int a[3]={1,2,3}; */
    /* int a[3]={0}; //统一初始化为0
    //可以单独对每个数组单独进行初始化
    a[0]=10;
    a[1]=20;
    a[2]=30; */

    // int a[100]={0};
    // for(int i=0;i<100;i++)
    // {
    //     a[i]=i+1;
    // }
    // for(int i=0;i<100;i++)
    // {
    //     printf("%d  ",a[i]);
    // }
    // printf("\n");

    //数组的内存大小=元素个数*单个元素的大小
    /* printf("%ld\n",sizeof(a));*/

    //printf("%p  %p  %p\n",&a[0],&a[1],&a[2]);
    //指针的数据类型是它的步长

    // int *p1=&a[0]; //p指针指向a[0]的地址
    // char *p2=&a[0];

    // for(int i=0;i<100;i++)
    // {
    //     printf("%d ",*(p1+i));
    // }

    // printf("%p  %p  %p\n",p1,p1+1,p2+1);

    // int a[50]={0};

    // for(int i=0;i<ArraySize(a);i++)
    // {  a[i]=i+1; }
    //     /* PrintArray(a,ArraySize(a)); */
    //    //&a[0]:取地址的首元素的地址
    //     //a=&a[0]
    //     //a:数组首元素的地址
    //    /*  printf("%p  %p",a+1,&a[0]+1); */
    //     printf("%d\n",*(a+1));
    //     //*(a+i)=a[i]  公式成立
    //     //&a：步长是整个数组
    //     //&a:数组的首地址
    //     printf("%p %p %p\n",a,a[0],&a);
    //     printf("%p %p %p\n",a+1,a[0]+1,&a+1);

        int c[50]={0};
        printf("%p  %p  %p",&c,&c+1,&c[2]);
    return 0;
}